package com.federicocolantoni.projects.interventix.helpers;

import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

import com.federicocolantoni.projects.interventix.application.Interventix;

public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector = new GestureDetector(Interventix.getContext(), new GestureListener());

    @Override
    public boolean onTouch(final View view, final MotionEvent motionEvent) {

	return gestureDetector.onTouchEvent(motionEvent);
    }

    private final class GestureListener extends SimpleOnGestureListener {

	private static final int SWIPE_THRESHOLD = 100;
	private static final int SWIPE_VELOCITY_THRESHOLD = 100;

	@Override
	public boolean onDown(MotionEvent e) {

	    return true;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

	    boolean result = false;

	    try {
		float diffY = e2.getY() - e1.getY();
		float diffX = e2.getX() - e1.getX();
		if (Math.abs(diffX) > Math.abs(diffY)) {
		    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
			if (diffX > 0) {
			    onSwipeRight();
			}
			else {
			    onSwipeLeft();
			}
		    }
		}
		else {
		    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
			if (diffY > 0) {
			    onSwipeBottom();
			}
			else {
			    onSwipeTop();
			}
		    }
		}
	    }
	    catch (Exception exception) {
		exception.printStackTrace();
	    }

	    return result;
	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {

	    onTouchUp();

	    return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {

	    onLongPressTouch();
	}
    }

    public void onTouchUp() {

    }

    public void onLongPressTouch() {

    }

    public void onSwipeRight() {

    }

    public void onSwipeLeft() {

    }

    public void onSwipeTop() {

    }

    public void onSwipeBottom() {

    }
}
